// https://leetcode-cn.com/problems/group-anagrams/
// 49. 字母异位词分组
// 给定一个字符串数组，请你将字母异位词组合在一起，可以按任意顺序返回结果列表。
// 字母异位词是由重新排列源单词得到的一个新单词，所有源单词中的字母通常恰好
// 只用一次
function groupAnagrams(strs: string[]): string[][] {
    if (strs.length === 1) return [strs];

    const map: Record<string, string[]> = {};

    for (let str of strs) {
        const hash = getHash(str);
        map[hash] ? map[hash].push(str) : (map[hash] = [str]);
    }

    function getHash(str: string): string {
        if (str.length === 0) return '0';

        const result: number[] = new Array(26).fill(0);
        const acode = 'a'.charCodeAt(0);
        for (let c of str) {
            result[c.charCodeAt(0) - acode]++;
        }

        return result.toString();
    }

    return Object.values(map);
}
